#pragma once

#include <string>

namespace RyForce
{

	template <typename T>
	class State 
	{
	public:

		State(T* _t, std::string _name = "State")
		{
			mOwner = _t;
			mName = _name;
		}

		virtual void enter() = 0;

		virtual void exit() = 0;

		virtual bool pause() = 0;

		virtual void resume() = 0;

		virtual void update(double timeSinceLastFrame) = 0;

		virtual void postFrame()=0;

		virtual ~State(){};

		std::string getName(){return mName;}

	protected:
		T*		mOwner;

		std::string   mName;
	};

}